package com.longtop.sp.mapdao;

/**
 * 此接口定义了用于“执行sql”的对象。
 *
 * 此处的“执行”是与查询相对应的，可以执行INSERT、UPDATE、DELETE语句，也可以
 * 执行SQL DDL (Data Definition Language)语句，如：CREATE TABLE、 DROP TABLE 或者 ALTER TABLE。
 * 使用方法：先创建一个对象，然后执行execute()方法，此对象的execute()方法可以反复使用，执行多个sql语句。
 *
 * <pre>
 * Execute e = DatabaseFactory.createExecute();
 * try {
 *   e.setSQL("insert into table1 values(1,'zs')");
 *   exe.execute();
 *   e.setSQL("delete from table1 where id=1");
 *   exe.execute();
 * }
 * catch (SQLException ex) {
 *   ex.printStackTrace();
 * }
 * </pre>
 *
 * 对于不同的数据库，如果其需要执行的sql语句是不同的，应该分别set进来，系统将根据当前的数据库，自动调用
 * 相应的sql语句。
 *
 * <pre>
 * Execute e = DatabaseFactory.createExecute();
 * try {
 *   e.setSQL("insert into table1 values(1,'zs')");  //缺省的sql语句
 *   e.setSQL("oracle","insert into table1 values(1,'zs-oracle')");  //Oracle数据库特定的sql语句
 *   e.setSQL("mssql","insert into table1 values(1,'zs-mssql')");    //mssql数据库特定的sql语句
 *   exe.execute();   //将根据当前的数据库，自动调用相应的sql语句，如果没有指定，就用缺省的。
 * }
 * catch (SQLException ex) {
 *   ex.printStackTrace();
 * }
 * </pre>
 *
 */

import java.sql.ResultSet;
import java.sql.SQLException;

public interface Execute {

	/**
	 * 执行INSERT、UPDATE、DELETE语句的效果是修改表中的0到多行中的0到多列，返回值是一个整数，反映了插入、更新、删除的
	 * 行数。对于SQL DDL语句，并没有对数据库表中的行做操作，所以，返回值永远是0。
	 * 
	 * @param sql
	 *            用于执行的sql语句，可以是INSERT、UPDATE、DELETE或SQL DDL语句。
	 * @return int 操作影响到的行数
	 * @throws SQLException
	 * @roseuid 3E80779E004E
	 */
	public int execute(String sql) throws SQLException;

	public int execute() throws SQLException;

	public void setSQL(String sql);

	public void setSQL(String dbType, String sql);

	// public void setConnection(Connection conn);

	public ResultSet executeQuery() throws SQLException;

	public ResultSet executeQuery(String sql) throws SQLException;

	public String chooseSQL();
}